home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
ACORNUSERS
/
EMULATOR
/
EMUL6502
/
Sources
/
TestAdc
< prev
Wrap
Text File
|
1998-08-27
|
4KB
|
93 lines
;Alain BROBECKER (aka baah/Arm's Tech), 06jun1998 & 24aug1998
;
;Some tests to ensure that the adc/sbc emulation works fine in non-BCD mode.
;If a difference is found with results (computed by hand, or is it by mind? =)
;at the end of the source it jumps at adress 0 (should contain &00='brk'),
;else it ends with the 'brk' inside the code (and you can relax =).
#name TestAdcX
#list
#base &100-4 ;Start assembly here
#rw &100 ;Load adress
#rw &100 ;Exec adress
ldx #&ff ;Initialise stack
txs
;adc & carry cleared NZCV
lda #1:clc:adc #1:php:pha ; .... =2
lda #-1:clc:adc #-1:php:pha ; 1.1. =-2
lda #1:clc:adc #-1:php:pha ; .11. =0
lda #-1:clc:adc #1:php:pha ; .11. =0
lda #2:clc:adc #-1:php:pha ; ..1. =1
lda #-1:clc:adc #2:php:pha ; ..1. =1
lda #1:clc:adc #-2:php:pha ; 1... =-1
lda #-2:clc:adc #1:php:pha ; 1... =-1
lda #-128:clc:adc #-128:php:pha ; .111 =0 (wrong)
lda #-128:clc:adc #-1:php:pha ; ..11 =127 (wrong)
lda #-1:clc:adc #-128:php:pha ; ..11 =127 (wrong)
lda #127:clc:adc #1:php:pha ; 1..1 =-128 (wrong)
lda #1:clc:adc #127:php:pha ; 1..1 =-128 (wrong)
;adc & carry set NZCV
lda #1:sec:adc #1:php:pha ; .... =3
lda #-1:sec:adc #-1:php:pha ; 1.1. =-1
lda #1:sec:adc #-2:php:pha ; .11. =0
lda #2:sec:adc #-2:php:pha ; ..1. =1
lda #1:sec:adc #-3:php:pha ; 1... =-1
lda #-128:sec:adc #-128:php:pha ; ..11 =1 (wrong)
lda #-128:sec:adc #-1:php:pha ; 1.1. =-128
lda #-128:sec:adc #-2:php:pha ; ..11 =127 (wrong)
lda #127:sec:adc #1:php:pha ; 1..1 =-127 (wrong)
lda #126:sec:adc #1:php:pha ; 1..1 =-128 (wrong)
;sbc & carry set NZCV
lda #1:sec:sbc #1:php:pha ; .11. =0
lda #-1:sec:sbc #-1:php:pha ; .11. =0
lda #2:sec:sbc #1:php:pha ; ..1. =1
lda #1:sec:sbc #2:php:pha ; 1... =-1
lda #1:sec:sbc #-1:php:pha ; .... =2
lda #-1:sec:sbc #1:php:pha ; 1.1. =-2
lda #127:sec:sbc #-1:php:pha ; 1..1 =-128 (wrong)
lda #1:sec:sbc #-127:php:pha ; 1..1 =-128 (wrong)
lda #-128:sec:sbc #1:php:pha ; ..11 =127 (wrong)
lda #-2:sec:sbc #127:php:pha ; ..11 =127 (wrong)
;sbc & carry cleared NZCV
lda #2:clc:sbc #1:php:pha ; .11. =0
lda #-1:clc:sbc #-2:php:pha ; .11. =0
lda #3:clc:sbc #1:php:pha ; ..1. =1
lda #1:clc:sbc #1:php:pha ; 1... =-1
lda #1:clc:sbc #-1:php:pha ; .... =1
lda #-1:clc:sbc #1:php:pha ; 1.1. =-3
lda #-127:clc:sbc #1:php:pha ; ..11 =127 (wrong)
lda #1:clc:sbc #-127:php:pha ; .... =127
lda #127:clc:sbc #-127:php:pha ; 1..1 =-3 (wrong)
ldx #results_end-1-results
.compare_one
pla
cmp results,x
beq no_error
.error
jmp 0
.no_error
dex
pla
cmp results,x
bne error
dex
bpl compare_one
brk
;Those ones are the results as computed by hand (BDI flags cleared).
.results
#b %00000000,2,%10000001,-2,%00000011,0,%00000011,0
#b %00000001,1,%00000001,1,%10000000,-1,%10000000,-1
#b %01000011,0,%01000001,127,%01000001,127,%11000000,-128
#b %11000000,-128,%00000000,3,%10000001,-1,%00000011,0
#b %00000001,1,%10000000,-1,%01000001,1,%10000001,-128
#b %01000001,127,%11000000,-127,%11000000,-128,%00000011,0
#b %00000011,0,%00000001,1,%10000000,-1,%00000000,2
#b %10000001,-2,%11000000,-128,%11000000,-128,%01000001,127
#b %01000001,127,%00000011,0,%00000011,0,%00000001,1
#b %10000000,-1,%00000000,1,%10000001,-3,%01000001,127
#b %00000000,127,%11000000,-3
.results_end